/******************************************************************

			           							
  * File    : app_device.h
  * By      : luofei
  * Version : V1.0
  * time    : 2013/01/16
********************************************************************/

#ifndef APP_DEVICE_H
#define APP_DEVICE_H
#include "../app_main/app_def.h"

#define ESLMAX  128

typedef struct _Device_Node{

	uint8_t    u_ip[4];
	uint16_t   u_port ;

	
}Device_Node;




typedef uint16_t (*DEVICE_RECV)( void *,unsigned char *,uint16_t );
typedef uint16_t (*DEVICE_SEND_CMOT)( void *,unsigned char *,uint16_t );
typedef uint16_t (*DEVICE_SEND_TMOT)( void *);

typedef uint16_t (*DEVICE_SEND_FUC)(  unsigned char *,uint16_t );

typedef uint16_t (*DEVICE_SEND_DELDYFUC)(  );

typedef struct _app_Device{
	
	DEVICE_RECV            d_Recv;
	DEVICE_SEND_CMOT       d_CreateTimer;
	DEVICE_SEND_TMOT       d_DealTimerout;
	DEVICE_SEND_FUC        d_SendFuc;
    DEVICE_SEND_DELDYFUC   d_SendDelayFuc;

	//Recv
	cir_queue				c_RecvBuffer;

	//Send
	cir_queue				c_SendBuffer;

//////////////////////////////////////////////////////////////////////////
#if BSP_OS_EN == 1

	OS_EVENT               *p_OS_RecvEvent;
	OS_EVENT               *p_OS_SendEvent;
#endif

//////////////////////////////////////////////////////////////////////////
#if STM32F103_DEVICE_DMA  == 1

	unsigned char          *p_DMA_RecvBuffer;

	unsigned char          *p_DMA_SendBuffer;
#endif

	list_unit              l_Unit;
}AppDevice,*p_AppDevice;

/*****************************************************                       
*				app_init_Device	
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
void app_init_Device( p_AppDevice p_Device,
						 DEVICE_RECV      p_Recv,
						 DEVICE_SEND_CMOT p_Create,
						 DEVICE_SEND_TMOT p_Timerout,
						 DEVICE_SEND_FUC  p_Send );


/*****************************************************                       
*				app_Set_DeviceDelayFuc	
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
void app_Set_DeviceDelayFuc( p_AppDevice p_Device,
						     DEVICE_SEND_DELDYFUC d_SendDelayFuc );


/*****************************************************                       
*				app_set_Device_RecvBuffer	
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
void app_set_Device_RecvBuffer( p_AppDevice p_Device,
						    unsigned char *p_Data,
							unsigned char  u_max,
							uint16_t  u_per );

/*****************************************************                       
*				app_set_device_SendBuffer	
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
void app_set_device_SendBuffer( p_AppDevice p_Device,
								unsigned char *p_Data,
								unsigned char  u_max,
								uint16_t  u_per );


/*****************************************************                       
*				app_set_Device_RecvEvent	
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
void app_set_Device_RecvEvent( p_AppDevice p_Device, OS_EVENT *_event );


/*****************************************************                       
*				app_set_Device_SendEvent	
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
void app_set_Device_SendEvent( p_AppDevice p_Device, OS_EVENT *_event );

//////////////////////////////////////////////////////////////////////////
/*****************************************************                       
*				app_get_Device_Recv
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
uint16_t app_get_Device_RecvData( p_AppDevice p_Device, unsigned char *p_Data ,
								   uint16_t *p_len,
                                   unsigned char *p_st) ;

/*****************************************************                       
*				bsp_get_device_send
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
uint16_t app_get_Device_SendData( p_AppDevice p_Device, unsigned char *p_Data ,
								   uint16_t *p_len,
                                   unsigned char *p_st ) ;
/////////////////////////////////////////////////////////////////////////
/*****************************************************                       
*				bsp_trigger_device_recv
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
uint16_t app_trigger_Device_RecvDeal( p_AppDevice p_Device, unsigned char *p_Data, 
									  uint16_t u_len,
                                      unsigned char u_st);


/*****************************************************                       
*				app_trigger_Device_SendDeal
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
uint16_t app_trigger_Device_SendDeal( p_AppDevice p_Device, unsigned char *p_Data, 
									  uint16_t u_len,
                                      unsigned char u_st );








///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
/*****************************************************                       
*				app_Device_RecvHandle
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
uint16_t app_Device_RecvHandle( p_AppDevice p_Device );

/*****************************************************                       
*				app_Device_SendHandle
* Description:	
* Arguments  :   
* Returns    : 
******************************************************/
void *  app_Device_SendHandle( p_AppDevice p_Device );

#endif
